/**
 * 广寒宫
 * 网址:www.guanghangong.xyz
 */
package com.moon.admin.tools.utils;

import org.apache.commons.lang3.StringUtils;

import com.moon.admin.framework.util.ToolUtils;
import com.moon.admin.tools.ToolsConstants;
import com.moon.admin.tools.entity.GenTableColumn;

/**
 * 代码生成器 工具类
 *
 * @author ninglong
 */
public class GenUtils {

    /**
     * 初始化列属性字段
     */
    public static void initColumnField(GenTableColumn column) {
        String dataType = getDbType(column.getColumnType());
        String columnName = column.getColumnName();
        // 设置java字段名
        column.setJavaField(columnName);
        if (ToolUtils.contains(ToolsConstants.COLUMNTYPE_STR, dataType)) {
            column.setJavaType(ToolsConstants.TYPE_STRING);
            // 字符串长度超过250设置为文本域
            Integer columnLength = getColumnLength(column.getColumnType());
            String htmlType = columnLength >= 250 ? ToolsConstants.HTML_TEXTAREA : ToolsConstants.HTML_INPUT;
            column.setHtmlType(htmlType);
            column.setColumnLength(columnLength);
        } else if (ToolUtils.contains(ToolsConstants.COLUMNTYPE_TIME, dataType)) {
            column.setJavaType(ToolsConstants.TYPE_DATE);
            column.setHtmlType(ToolsConstants.HTML_DATETIME);
        } else if (ToolUtils.contains(ToolsConstants.COLUMNTYPE_NUMBER, dataType)) {
            column.setHtmlType(ToolsConstants.HTML_NUMBER);
            // 如果是浮点型 统一用BigDecimal
            String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ",");
            if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) {
                column.setJavaType(ToolsConstants.TYPE_BIGDECIMAL);
            }
            // 如果是整形
            else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) {
                column.setJavaType(ToolsConstants.TYPE_INTEGER);
            }
            // 长整形
            else {
                column.setJavaType(ToolsConstants.TYPE_LONG);
            }
            column.setColumnLength(Integer.parseInt(str[0]));
        }
        //除主键外，所有字段都可以编辑、列表显示、查询条件
        if (!column.isPk()) {
            column.setIsEdit(ToolsConstants.REQUIRE);
            column.setIsList(ToolsConstants.REQUIRE);
            column.setIsQuery(ToolsConstants.REQUIRE);
        }
    }

    /**
     * 获取数据库类型字段
     *
     * @param columnType 列类型
     * @return 截取后的列类型
     */
    public static String getDbType(String columnType) {
        if (StringUtils.indexOf(columnType, "(") > 0) {
            return StringUtils.substringBefore(columnType, "(");
        } else {
            return columnType;
        }
    }

    /**
     * 获取字段长度
     *
     * @param columnType 列类型
     * @return 截取后的列类型
     */
    public static Integer getColumnLength(String columnType) {
        if (StringUtils.indexOf(columnType, "(") > 0) {
            String length = StringUtils.substringBetween(columnType, "(", ")");
            return Integer.valueOf(length);
        } else {
            return 0;
        }
    }
}
